// 获取小程序的实例
const app = getApp()

export default function createRequest(options){
  return new Promise((resolve) => {
    const token = wx.getStorageSync('token')
    // 如果没有登录, 跳转路由 wx.redirectTo
    if(options.needLogin !== false && !token){
      wx.showToast({
        title: '请登录！',
        icon: 'none'
      })
      setTimeout(() => {
        // 1秒后跳转路由到登录页
        wx.redirectTo({
          url: '/pages/login/index',
        })
      },1000);
      return
    }

    // app.js的方法
    const baseUrl = app.getConfig("baseUrl")
    const url = `${baseUrl}${options.url}`
    const header = { 
      token
    }
    let showLoading = false
    if(options.loading !== false){
      showLoading = true
      wx.showLoading({
        title: '正在加载中......',
        mask: true
      })
    }
    wx.request({
      url,
      method: options.method || 'GET',
      timeout: options.timeout || 20000,
      header,
      data: options.data || {},
      // 成功
      success(res){
        res = res.data 
        switch(res.code){
          case 0:
            return resolve(res) // 请求成功
          case -1:
            wx.showToast({    // 异常
              title: res.msg,
              icon: 'none'
            })
            break;
          case 403:
            wx.showToast({    // 登录信息失效
              title: '登录信息失效，请重新登录！',
              icon: 'none'
            })
            setTimeout(() => {
              wx.redirectTo({
                url: '/pages/login/index',
              })
            }, 1000);
            break;
          default:
            wx.showToast({
              title: '服务器开小差了！！',
              icon: 'none'
            })
            break;
        }
      },
      // 失败
      fail(){
        wx.showToast({
          title: '服务器开小差了！！',
          icon: 'none'
        })
      },
      // 完成，如果有loading就隐藏
      complete(){
        if(showLoading){
          wx.hideLoading()
        }
      },
    })

  })
}